package com.atguigu.algorithm;

import java.util.Arrays;

/**
 * @Author: shenhao
 * @CreatTime: 2024/10/31 16:59
 * @Version: 1.0
 * 283 移动0
 * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 * 请注意 ，必须在不复制数组的情况下原地对数组进行操作。
 */
public class LeetCode283 {
    public static void main(String[] args) {
        int[] nums=new int[]{0, 1, 0, 3, 12};
        //int[] nums=new int[]{1,0};
        moveZeroes(nums);
        System.out.println(Arrays.toString(nums));
    }
    // 快慢相等值不变 慢针不动快针走
    // 快慢不等值, 我是题型2, 快针慢针值互换, 慢针向前一步走, 快针向前一步走
    // 快慢不等值, 我是题型一, 慢针向前一步走,快针赋值给慢针, 快针向前一步走
    // 题型2 移动0 不等于0时交换   题型1 返回去重的数组和数组长度
    public static void moveZeroes(int[] nums) {
        int slowPointer = 0; int fastPointer = 0;
        while (fastPointer < nums.length) {
            if (nums[fastPointer] != 0) {
                int temp = nums[fastPointer];
                nums[fastPointer] = nums[slowPointer];
                nums[slowPointer] = temp;
                slowPointer++;
            }
            fastPointer++;
        }
    }
}
